#ifndef GRAYVALUEMEASUREMENTRESULTWIDGET_H
#define GRAYVALUEMEASUREMENTRESULTWIDGET_H

#include <QVariantMap>
#include <QList>
#include <QChartView>
#include <QLineSeries>
#include <QValueAxis>
#include <QChart>
#include <QMenu>
#include <QAction>

using namespace QtCharts;

namespace Ui {
class GrayValueMeasurementResultWidget;
}


/**
 * @brief 灰度值测量结果显示界面类
 * 用于显示图像中指定点的灰度值测量结果，包括灰度值列表和灰度分布图
 */
class GrayValueMeasurementResultWidget : public QWidget
{
    Q_OBJECT

public:
    explicit GrayValueMeasurementResultWidget(QWidget *parent = nullptr);
    ~GrayValueMeasurementResultWidget();

    /**
     * @brief 更新灰度值测量结果
     * @param result 测量结果数据
     */
    void updateGrayValueResult(const QVariantMap &result);

    /**
     * @brief 清空结果显示
     */
    void clearResults();

private:
    /**
     * @brief 计算灰度统计信息
     * @param grayValues 灰度值列表
     * @return 包含统计信息的QVariantMap
     */
    QVariantMap calculateGrayStatistics(const QList<int> &grayValues);

    /**
     * @brief 更新灰度分布图
     * @param grayValues 灰度值列表
     */
    void updateGrayHistogram(const QList<int> &grayValues);
    
    /**
     * @brief 根据当前方向更新灰度分布图
     * 根据横向或纵向计算结果更新直方图显示
     */
    void updateGrayHistogramForDirection();

private slots:
    /**
     * @brief 保存图表图像
     */
    void saveChartImage();

private:
    // 方向枚举
    enum Direction {
        HORIZONTAL,
        VERTICAL
    };

    Ui::GrayValueMeasurementResultWidget *ui; // UI对象指针
    QLineSeries *m_series; // 灰度值序列
    QChart *m_chart; // 图表对象
    QValueAxis *m_axisX; // X轴
    QValueAxis *m_axisY; // Y轴
    Direction m_currentDirection; // 当前方向
    QString m_currentMeasurementType; // 当前测量类型
    QVariantMap m_lastResult; // 保存上次的测量结果
    QMap<int, double> m_directionAverages; // 存储按方向计算的平均值
    QMenu *m_chartContextMenu; // 图表右键菜单
    QAction *m_saveImageAction; // 保存图像动作
};

#endif // GRAYVALUEMEASUREMENTRESULTWIDGET_H
